
import { Command } from 'commander';
import chalk from 'chalk';
import logSymbols from 'log-symbols';
import inquirer from 'inquirer';
import ora from 'ora';
import fs from 'fs/promises';

//  查看所有命令的帮助
// node src/index.js --help

// # 查看特定命令的帮助
// node src/index.js file --help
// node src/index.js text --help
// node src/index.js calc --help

const { success, error, info, warning } = logSymbols;

const program = new Command();
// 基础信息配置
program
  .name('minitool')
  .description('一个实用的Node.js命令行小工具集')
  .version('1.0.0');

// 文件操作工具
program
  .command('file')
  .description('文件操作工具')
  .option('-c, --create <filename>', '创建新文件')
  .option('-r, --read <filename>', '读取文件内容')
  .action(async (options) => {
    if (options.create) {
      const spinner = ora('正在创建文件...').start();
      try {
        await fs.writeFile(options.create, '');
        spinner.succeed(`文件 ${chalk.green(options.create)} 创建成功！`);
      } catch (err) {
        spinner.fail(`文件创建失败: ${err.message}`);
      }
    } else if (options.read) {
      try {
        const content = await fs.readFile(options.read, 'utf-8');
        console.log(chalk.blue(`文件内容:\n${content}`));
      } catch (err) {
        console.log(chalk.red(`${error} 读取文件失败: ${err.message}`));
      }
    } else {
      console.log(chalk.yellow('请提供文件操作选项'));
    }
  });

// 创建文件
// node src/index.js file --create example.txt
// node src/index.js file -c test.md

// 读取文件（需要文件存在）
// node src/index.js file --read example.txt
// node src/index.js file -r test.md


// 文本处理工具
program
  .command('text')
  .description('文本处理工具')
  .option('-u, --uppercase <text>', '转换为大写')
  .option('-l, --lowercase <text>', '转换为小写')
  .option('-r, --reverse <text>', '反转文本')
  .action((options) => {
    if (options.uppercase) {
      console.log(chalk.green(`大写: ${options.uppercase.toUpperCase()}`));
    } else if (options.lowercase) {
      console.log(chalk.green(`小写: ${options.lowercase.toLowerCase()}`));
    } else if (options.reverse) {
      console.log(chalk.green(`反转: ${options.reverse.split('').reverse().join('')}`));
    } else {
      console.log(chalk.yellow('请提供文本处理选项'));
    }
  });

// 转换为大写
// node src/index.js text --uppercase "hello world"
// node src/index.js text -u "hello world"

// 转换为小写
// node src/index.js text --lowercase "HELLO WORLD"
// node src/index.js text -l "HELLO WORLD"

// 反转文本
// node src/index.js text --reverse "hello"
// node src/index.js text -r "hello"

// 计算器工具
program
  .command('calc')
  .description('简单计算器')
  .option('-a, --add <numbers...>', '加法运算')
  .option('-s, --subtract <numbers...>', '减法运算')
  .action((options) => {
    if (options.add) {
      const sum = options.add.reduce((acc, num) => acc + Number(num), 0);
      console.log(chalk.cyan(`${success} 计算结果: ${sum}`));
    } else if (options.subtract) {
      if (options.subtract.length < 2) {
        console.log(chalk.red(`${error} 减法运算需要至少两个数字`));
        return;
      }
      const result = options.subtract.reduce((acc, num, index) => {
        if (index === 0) return Number(num);
        return acc - Number(num);
      }, 0);
      console.log(chalk.cyan(`${success} 计算结果: ${result}`));
    } else {
      console.log(chalk.yellow('请提供计算选项'));
    }
  });

// 加法运算
// node src/index.js calc --add 1 2 3 4 5
// node src/index.js calc -a 10 20 30

// 减法运算
// node src/index.js calc --subtract 100 50 20
// node src/index.js calc -s 50 10 5

// 默认显示帮助信息
program.action(() => {
  console.log(chalk.blue.bold('\n🚀 MiniTool 小工具集\n'));
  console.log(chalk.gray('一个实用的Node.js命令行工具集合\n'));
  program.outputHelp();
});

program.parse(process.argv);